/**
 * QForm 表单辅助工具
 * 提供通用的表单配置增强功能
 */

import type { FormItemRows } from '@meetjs/element-plus-kit'

/**
 * 为单个表单项的 attrs 添加回车搜索事件
 * @param attrs 原始 attrs 配置
 * @param searchHandler 搜索处理函数
 * @returns 增强后的 attrs
 */
const enhanceAttrsWithEnterSearch = (attrs: Record<string, any> = {}, searchHandler: () => void): Record<string, any> => {
	return {
		...attrs,
		onKeydown: (event: KeyboardEvent) => {
			// 保留原有的 onKeydown 事件
			if (attrs.onKeydown && typeof attrs.onKeydown === 'function') {
				attrs.onKeydown(event)
			}

			// 添加回车搜索逻辑
			if (event.key === 'Enter') {
				event.preventDefault() // 防止表单默认提交
				searchHandler()
			}
		}
	}
}

/**
 * 为表单配置批量添加回车搜索功能
 *
 * @param formOptions 原始表单配置数组（纯净的，不含业务事件）
 * @param searchHandler 搜索回调函数
 * @param targetTypes 需要添加事件的表单类型，默认只对 input 和 textarea 生效
 * @returns 增强后的表单配置数组（input/textarea 类型自动添加 onKeydown 回车搜索）
 *
 * @example
 * ```typescript
 * import { addEnterSearchToFormOptions } from '@/utils/formHelper'
 * import { baseFormOptions } from './formConfig'
 *
 * // 使用工厂函数创建支持回车搜索的配置
 * const searchableOptions = computed(() =>
 *   addEnterSearchToFormOptions(baseFormOptions.value, getTableData)
 * )
 * ```
 */
export const addEnterSearchToFormOptions = (
	formOptions: FormItemRows[],
	searchHandler: () => void,
	targetTypes: string[] = ['input', 'textarea']
): FormItemRows[] => {
	return formOptions.map(item => {
		// 只对指定类型的表单项添加回车事件
		if (targetTypes.includes(item.type)) {
			return {
				...item,
				attrs: enhanceAttrsWithEnterSearch(item.attrs || {}, searchHandler)
			}
		}
		// 其他类型的表单项保持不变
		return item
	})
}
